import http from '@/utils/request'
/**
 * 获取用户基本信息
 */
export const getUser = () => {
  return async (dispatch) => {
    const res = await http.get('/user')
    const user = res.data
    dispatch(setUser(user))
  }
}
/**
 * 保存用户信息
 * @param {*} user
 * @returns
 */
export const setUser = (user) => {
  return {
    type: 'profile/user',
    payload: user,
  }
}

/**
 * 获取用户详细信息
 * @returns
 */
export const getUserProfile = () => {
  return async (dispatch) => {
    const res = await http.get('/user/profile')
    dispatch(setUserProfile(res.data))
  }
}

export const setUserProfile = (profile) => {
  return {
    type: 'profile/profile',
    payload: profile,
  }
}
/**
 * 修改个人详情：昵称、简介、生日、性别 （每次修改一个字段）
 * @param {String} name 要修改的字段名称
 * @param {*} value 要修改的字段值
 * @returns thunk
 */
export const updateProfile = (name, value) => {
  return async (dispatch) => {
    // 调用接口将数据更新到后端
    const res = await http.patch('/user/profile', { [name]: value })
    // 如果后端更新成功，则再更新 Redux 中的数据
    if (res.message === 'OK') {
      dispatch(getUserProfile())
    }
  }
}

/**
 * 更新头像
 * @param {FormData} formData 上传头像信息的表单数据
 * @returns thunk
 */
export const updateAvatar = (formData) => {
  return async (dispatch) => {
    // 调用接口进行上传
    const res = await http.patch('/user/photo', formData)

    // 如果后端更新成功，则再更新 Redux 中的数据
    if (res.message === 'OK') {
      dispatch(getUserProfile())
    }
  }
}
